草庐IT

带指针的 C++ vector

全部标签

c++ - 指向 C++ 字符串的指针

在下面的代码中,我在change()函数中使用了一个指向C++字符串的指针。在处理指向字符串的指针时,是否可以使用字符串类的运算符?例如,at()适用于[]运算符,但是有什么方法可以使用[]运算符吗?#include#includeusingnamespacestd;voidchange(string*s){s->at(0)='t';s->at(1)='w';//s->[2]='o';doesnotwork//*s[2]='o';doesnotwork}intmain(intargc,char**argv){strings1="one";change(&s1);cout

c++ - 神秘的 C++ "thing"(函数指针)

此语法在C++中的作用是什么?谁能指出技术术语,以便我查看是否在我的文本中找到任何内容?起初我以为它是一个原型(prototype),但后来=和(*fn)让我失望了......这是我的例子:void(*fn)(int&,int&)=x; 最佳答案 可以改写为typedefvoid(*T)(int&,int&);Tfn=x;第二个语句很明显,它应该已经解决了=x;问题。在第一个语句中,我们将T作为类型void(*)(int&,int&)的同义词,这意味着:指向函数的指针((*…))返回void并采用2个参数:int&、int&。

c++ - 将指针容器转换为智能指针?

是否有一种简洁、通用的方法来转换常规/哑指针的std容器(例如vector):vector例如,boost::shared_ptr?:vector>我想我可以使用vector的范围构造函数来完成它:vectorvec_a;...vector>vec_b(vec_a.begin(),vec_a.end());但是拒绝编译(VisualStudio2008)。编辑:测试代码:voidtest(){vectorvec_a;vector>vec_b(vec_a.begin(),vec_a.end());}编译错误:1>c:\ProgramFiles(x86)\MicrosoftVisualSt

c++ - 为什么有人需要指向指针的指针?

例如,为什么需要char**myVariable;?如果一个指针只是内存中的一个地址,那么如果它是一个指向地址的指针和一个指向字符地址的指针,而不是一个指向一个字符地址的指针,为什么会有什么不同呢?在汇编中不会这样LDRR3,=myVariableLDRR2,=[R3]LDRR1,=[R2]LDRR0,=[R1]单个指针所在的位置LDRR1,=myVariableLDRR0,=[R1]现在R0持有值(value)?显然这种方式更快。 最佳答案 如果您想通过函数修改指针的值,则必须通过引用将指针的地址传递给函数。因此,您将需要指向指针

c++ - 为什么 std::vector max_size() 函数会返回 -1?

我有一个std::vectorm_vData;m_vData.max_size()总是返回-1。为什么会这样? 最佳答案 可能是因为您在查看之前将其分配给签名类型。max_size的返回值通常是size_t,这是一个无符号类型。在许多平台上直接转换为int将返回-1。试试下面的方法std::vector::size_typev1=myVector.max_size(); 关于c++-为什么std::vectormax_size()函数会返回-1?,我们在StackOverflow上找到一

c++ - 在 C++ 中检查空指针的首选方法是什么?

选项A:if(NULL==pSomethingColumn)//Yes,weuseYodaconditionsif(NULL!=pSomethingColumn)或者if(pSomethingColumn)if(!pSomethingColumn)我也在寻找解释推理的引用资料。我听说有人说从技术上讲,NULL不必定义为0,但是拜托!如果是这样的话,那么傻瓜(我们的应用程序)就会以-2147483648不同的方式崩溃。所以,如果NULL!=0,那么我们就会遇到大问题。请帮我解决一场毫无意义的语法辩论。我并不特别喜欢这两种方式。只是在寻找官方方式。谢谢。附言我们正在使用VisualStud

c++ - shared_ptr 与指针共存

我有一个函数如下voida(shared_ptrval){...}有时候,我想传入一个堆分配的对象shared_ptrv(newX());a(v);其他时候,我想传入一个堆栈分配的对象classC{//doesn'tworkproperlyb/cwhentheshared_ptrdiesitwilltrytodeletex...C(){a(shared_ptr(&x));}Xx;};让函数接受智能指针,同时让智能指针引用堆栈分配对象的最佳方法是什么?或者我应该走Java路线并从堆中分配所有内容? 最佳答案 我只想让函数采用这样的模板

c++ - 从具有 O(1) 运行时间的 vector 中删除元素

"写一个函数,输入一个vector类型的对象在常数时间O(1)[常数]中删除第k个元素。假设元素的顺序无关紧要。”我想我可能对此有所了解。但是,当我开始尝试使用.erase()时,我查看了大O符号是什么,发现它是O(n),就像线性关系一样。我暂时想不出任何其他方式。我不想要任何代码,但我认为如果有人可以提供帮助,伪代码至少会为我指明正确的方向 最佳答案 Assumethattheorderofelementsdoesnotmatter.这是你需要注意的。假设你有一个vector0123456你想删除3。你可以把它变成012645在O

c++ - std::list、std::vector 方法和 malloc()

在中断处理程序下使用STL:list和STL::vector类型我想避免调用malloc()。问题:防止在STL列表和vector中调用malloc()的最佳方法是什么?创建具有预定义大小的结构然后避免push/pop/erase调用就足够了吗?提前致谢 最佳答案 std::list和std::vector等STL容器具有接受Allocator类型的构造函数。通过提供您自己的分配器而不是使用默认分配器,您可以控制容器分配内存的方式。这个选项很少使用,但是在实时环境中使用你自己的分配器是一个很好的例子,说明了这个特性在哪里有用(并证明

c++ - 指针数组

如何获得指向对象(类)的指针数组?我需要为它们动态分配空间,数组的长度直到运行时才确定。任何人都可以解释并告诉我如何定义它吗?并可能向他们解释它是如何工作的,这真的很好:) 最佳答案 改用std::vector。它旨在根据需要动态调整集合的大小。#include//...std::vectorvec;vec.push_back(my_class_ptr);Class*ptr=vec[0]; 关于c++-指针数组,我们在StackOverflow上找到一个类似的问题: